影像輪廓(Contours)是一種用於檢測與分析物體邊界的技術,常見於物體追蹤、形狀分析、物體計數等場景。透過輪廓分析,可以精確取得物件外型、大小與位置,為後續辨識與分類奠定基礎。
請準備一張二值化圖片 image.png
,並放在與程式同一資料夾。
import cv2
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 進行二值化處理
_, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('Binary', binary)
# 讀取二值化影像
img_gray = binary
# 將灰階或二值影像轉為彩色 BGR,方便繪製彩色輪廓
img_color = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)
# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()
# 查找輪廓
contours, hierarchy = cv2.findContours(img_gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 在彩色影像上繪製輪廓
cv2.drawContours(img_color, contours, -1, (0, 0, 255), 2) # 紅色輪廓
cv2.imshow('Contours', img_color)
cv2.findContours(image, mode, method)
image
:輸入二值化影像。mode
:輪廓檢索方式,如 cv2.RETR_EXTERNAL
(僅最外層)或 cv2.RETR_TREE
(含層級結構)。method
:輪廓近似方法,如 cv2.CHAIN_APPROX_SIMPLE
(壓縮冗餘點)或 cv2.CHAIN_APPROX_NONE
(保留所有點)。cv2.drawContours(image, contours, contourIdx, color, thickness)
contourIdx=-1
:繪製所有輪廓。color
:BGR 顏色。thickness
:線寬,-1 代表填滿。效果:紅色線條標示物件輪廓,邊界清晰可見。
# 計算每個輪廓的面積與周長
for i, cnt in enumerate(contours):
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt, True)
print(f'輪廓{i}: 面積={area}, 周長={perimeter}')
# 形狀近似:將輪廓簡化為多邊形
for i, cnt in enumerate(contours):
epsilon = 0.02 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
cv2.drawContours(img_color, [approx], -1, (0, 255, 0), 2) # 綠色近似輪廓
cv2.imshow('Approximated Contours', img_color)
效果:
# 外接矩形與圓形:分析物件外型
for cnt in contours:
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(img_color, (x, y), (x + w, y + h), (255, 0, 0), 2) # 藍色矩形
(cx, cy), radius = cv2.minEnclosingCircle(cnt)
cv2.circle(img_color, (int(cx), int(cy)), int(radius), (0, 255, 255), 2) # 黃色圓形
cv2.imshow('Bounding Rect & Circle', img_color)
效果:
方法 | 說明 |
---|---|
contourArea | 計算輪廓面積,反映物件大小 |
arcLength | 計算輪廓周長,反映物件邊界長度 |
approxPolyDP | 將輪廓近似為多邊形,便於形狀分析 |
boundingRect | 計算外接矩形,取得物件位置與尺寸 |
minEnclosingCircle | 計算最小外接圓,分析物件圓度與包覆性 |
比較:面積與周長可用於物件篩選與分類,形狀近似便於辨識多邊形物件,外接矩形與圓形則有助於定位與形狀特徵分析。
透過彩色輪廓繪製,我們能清楚觀察二值化影像的物件邊界,並進一步進行面積、周長、形狀近似、外接矩形與圓形等分析。這些技術是影像分析與物體辨識的重要基礎,能協助精確分割、分類與量測物件。